/*
 * 基于Swing的人脸识别UI，Swing也同时是idea intellj使用的界面库
 * Swing官方有详细的界面使用demo
 * 
 * 本工程基于gradle7构建工具,兼容jdk8以上语法，推荐在jre11或以上运行（性能更好）
 * 跨平台运行windows linux macos
 * 
 * ### 执行应用程序
 * gradle run
 * 运行以上命令，gradle会自动下载依赖
 * 
 * ### 构建发布包
 * gradle assembleDist
 * 在app/build/distributions目录下生成tar和zip两种包
 * 
 */
package myface;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.plaf.DimensionUIResource;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.awt.*;

import javax.imageio.ImageIO;

import com.github.kevinsawicki.http.HttpRequest;
import com.google.gson.Gson;
public class App {

    public static void main(String[] args)throws MalformedURLException, IOException, URISyntaxException {
      // FaceProxy.registerPerson("name", "/home/czj/图片/2020-09-23-023219.jpg");
      // FaceProxy.startOne2Many();
      // FaceProxy.getConfig();
      // FaceProxy.startOne2One(null);
      // FaceProxy.startOne2One("/home/czj/图片/2020-09-23-023219.jpg");
      // FaceProxy.setConfig(4.5f);
      // FaceProxy.uploadImage("/home/czj/图片/2020-09-23-023219.jpg");
      // FaceProxy.getPagedFaces(0, 1);
      // if(true){
      //   return;
      // }

      EmptyClient client = new EmptyClient(new URI( FaceProxy.wsHost ));
      JLabel jl=new JLabel(""){
        @Override
        protected void paintComponent(Graphics g) {//直接输出图片，提高性能
          if(client.previewImage!=null){
            g.drawImage(client.previewImage, 0, 0, null);
          }
        }
      };
      client.imgLbl = jl;//传入图片控件，websocket消息线程控制刷新
		  client.connect(); //连接人脸引擎

      // swing ui代码
      JFrame f = new JFrame("人脸识别demo JAVA版本 swing界面");
      f.setSize(800,1200);	
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      f.getContentPane().setLayout(new BorderLayout());
      f.getContentPane().add(jl,BorderLayout.CENTER);
      // 按钮面板
      JPanel controlPane = new JPanel();
      controlPane.setPreferredSize(new Dimension(200, 80));
      controlPane.add(new JButton("拍照"));
      controlPane.add(new JButton("注册人脸"));

      JButton one2ManyBtn = new JButton("1:n");
      controlPane.add(one2ManyBtn);
      f.getContentPane().add(controlPane,BorderLayout.SOUTH);
      one2ManyBtn.addActionListener((e)->{
        FaceProxy.startOne2Many();
      }); 


      JButton one2oneBtn = new JButton("1:1");
      controlPane.add(one2oneBtn);
      one2oneBtn.addActionListener((e)->{
        FaceProxy.startOne2One("/home/czj/图片/2020-09-23-023219.jpg");
      }); 
      
      //事件处理程序
      one2ManyBtn.addActionListener((e)->{
        try {
          if (FaceProxy.startOne2Many()) {
            JOptionPane.showMessageDialog(f, "操作成功", "提示消息", JOptionPane.INFORMATION_MESSAGE);
          }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(f, "操作失败!"+ex.getMessage(), "提示消息", JOptionPane.ERROR_MESSAGE);
        }
      });


      //日志面板
      JPanel logPane = new JPanel(new BorderLayout());
      logPane.setPreferredSize(new DimensionUIResource(200, 200));
      logPane.add(new JTextArea(),BorderLayout.CENTER);
      f.getContentPane().add(logPane,BorderLayout.EAST);

      // BufferedImage previewImage = ImageIO.read(new URL("https://www.baidu.com/img/flexible/logo/pc/peak-result.png"));
      f.setVisible(true);
    }
}
